import java.util.*;

public class 螺旋矩阵 {

    /**
     * https://leetcode.cn/problems/spiral-matrix/description/?envType=problem-list-v2&envId=array
     * 模拟＋调试
     * @param matrix
     * @return
     */
    public static List<Integer> spiralOrder(int[][] matrix) {
        List<Integer> ans = new ArrayList<>();
        int n = matrix.length;
        int m = matrix[0].length;
        //移动的位置
        int i = 0;
        int j = 0;
        //四个界
        int w = 0;
        int s = n - 1;
        int a = 0;
        int d = m - 1;
        //判断入的数量
        while(ans.size() < n * m){
            for(;j <= d;j++){
                ans.add(matrix[i][j]);

            }
            //上边界调整
            w++;
            //越界调整
            j--;
            //防止边界元素重复入
            i++;
            for(;i <= s;i++){
                ans.add(matrix[i][j]);
            }
            d--;
            i--;
            j--;
            for(;j >= a;j--){
                ans.add(matrix[i][j]);
            }
            s--;
            j++;
            i--;
            for(;i >= w;i--){
                ans.add(matrix[i][j]);
            }
            a++;
            i++;
            j++;
        }
        //去除多余元素
        int cnt = ans.size() - n * m;
        while(cnt > 0){
            ans.remove(ans.size() - 1);
            cnt--;
        }
        return ans;
    }

    public static void main(String[] args) {
        int[][] matrix = {
                {1, 2, 3},
                {4, 5, 6},
                {7, 8, 9}
        };
        spiralOrder(matrix);
    }
}
